package algorithms.sorts.radix;

public interface RadixKey<E> {

    int positionAt(int radix);

    E value();

    int radixCount();


    static RadixKey<Integer> wrapInt(int value) {
        return new RadixKey<>() {

            @Override
            public int positionAt(int radix) {
                int t = value;
                for (int i = 1; i <= radix - 1; i++) {
                    t = t / 10;
                }
                return t % 10 + 9;
            }

            @Override
            public Integer value() {
                return value;
            }

            @Override
            public int radixCount() {
                int temp = value;
                int i = 0;
                do {
                    temp = temp / 10;
                    i++;
                } while (temp !=0);

                return i;
            }

            @Override
            public String toString() {
                return value().toString();
            }
        };


    }

}
